package com.moon.back.util;

import javax.annotation.Nonnull;
import java.io.Serializable;
import java.util.function.Supplier;

/**
 * IRefreshCacheService
 *
 * @author <a href="drakelee1221@gmail.com">LiGeng</a>
 * @version 1.0.0, 2025-04-09 14:02
 */
public interface IRefreshCacheService {
    /**
     * @see #queryOrRefresh(String, Serializable, Supplier)
     */
    <T> T queryOrRefresh(@Nonnull Supplier<T> dataQuery);

    /**
     * @see #queryOrRefresh(String, Serializable, Supplier)
     */
    <T> T queryOrRefresh(Serializable queryCondition, @Nonnull Supplier<T> dataQuery);

    /**
     * @see #queryOrRefresh(String, Serializable, Supplier)
     */
    <T> T queryOrRefresh(String queryType, @Nonnull Supplier<T> dataQuery);

    /**
     * 查询缓存，如果缓存不存在，则执行查询方法并缓存，
     * 如果缓存存在则返回缓存数据，并判断满足刷新时间条件时异步刷新缓存
     * @param queryType         查询类型，为空时去 dataQuery 的类名
     * @param queryCondition    查询条件
     * @param dataQuery         查询方法，非空
     * @return 查询结果
     */
    <T> T queryOrRefresh(String queryType, Serializable queryCondition, @Nonnull Supplier<T> dataQuery);


    /**
     *
     * @param insertName
     * @param insertQuery
     * @param <T>
     */
    <T> void insertData(String insertName,    Supplier<T> insertQuery);

    /**
     * 文件的插入操作
     *    作为异步封装
     * @param insertName
     * @param insertQuery
     * @param <T>
     */
    <T> void insertToMysql(String insertName, String key,   Supplier<T> insertQuery);

}